package com.danbay.cloud.device.api.dto;

import com.danbay.cloud.base.constants.DeviceType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Pattern;

/**
 * @author SJG
 *         2017/10/16
 *         设备注册接口的DTO
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DeviceRegDto {

    /**
     * 设备 SN 号，用于区分设备。
     * SN码组成：
     * “DB”-“设备类型”-“产品型号”
     * SN码范围：
     * DB-GW-XX（中控）
     * DB-LK1-XX（大锁8105）
     * DB-LK2-XX（小锁8015）
     * DB-EM1-XX（电表）
     * DB-WM1-XX（水表）
     * DB-GW-xxx-xxx
     */
    @NotBlank(message = "设备名不能为空")
    @Pattern(regexp = "DB-[A-Za-z0-9]+-\\S+", message = "设备名不符合规则")
    private String sn;
    /**
     * 设备mac地址
     */
    @NotBlank(message = "设备的mac地址不能为空")
    @Pattern(regexp = "[A-Za-z0-9:]{12,}",message = "设备mac地址不合法")
    private String mac;
    /**
     * 设备版本号
     */
    @NotBlank(message = "设备的版本号不能为空")
    private String ver;
    /**
     * 中控或设备所属中控ip地址
     */
    @NotBlank(message = "中控或设备所属中控ip地址不能为空")
    private String ip;

    /**
     * 设备父级设备ID
     */
    private String fatherDevId;

    /**
     * 是否为网关
     *
     * @return
     */
    @JsonIgnore
    public boolean isGateway() {
        return DeviceType.parse(sn) == DeviceType.CENTRAL_CONTROL;
    }
}
